#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int n;
int l[N], r[N];

//求二叉树的深度
int dfs(int u)
{
	if(u == 0) return 0;
	
	//左右子树最大高度+自身的高度1
	return max(dfs(l[u]), dfs(r[u])) + 1;
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> l[i] >> r[i];
	}

	cout << dfs(1) << endl;

	return 0;
}

